package com.tanhua.admin.service;

import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.tanhua.admin.mapper.AnalysisMapper;
import com.tanhua.admin.mapper.LogMapper;
import com.tanhua.model.domain.Analysis;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

@Service
public class AnalysisService {
    @Autowired
    private LogMapper logMapper;
    @Autowired
    private AnalysisMapper analysisMapper;

    /**
     *定时统计log表中的数据，保存或更新到analysis表中
     * 查询log注册用户数、登录用户数、活跃用户数、次日留存数）
     * 构造Analysis对象
     * 保存或更新
     */
    public void analysis() throws ParseException {
        //定义查询的日期
        String todayStr = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); //今天的日期
        String yesdayStr = DateUtil.yesterday().toString("yyyy-MM-dd");          //昨天的日期
        //统计注册数量
        Integer regCount = logMapper.queryByTypeAndLogTime("0102", todayStr);
        //统计登录数量
        Integer loginCount = logMapper.queryByTypeAndLogTime("0101", todayStr);
        //统计活跃数量
        Integer activeCount = logMapper.queryByLogTime(todayStr);
        //统计次日留存数量
        Integer numRetention = logMapper.queryNumRetention1d(todayStr, yesdayStr);
        //根据日期查询数据，如果存在就更新，不存在就保存 因为是每过一段时间统计一次
        //构造Analysis对象
        QueryWrapper<Analysis> wr = new QueryWrapper<Analysis>();
        //不能直接把日期传进去 因为数据库要求的是日期格式 这里的是String格式
        wr.eq("record_date",new SimpleDateFormat("yyyy-MM-dd").parse(todayStr));
        Analysis analysis = analysisMapper.selectOne(wr);
        if (analysis != null) {
            analysis.setNumRegistered(regCount);
            analysis.setNumLogin(loginCount);
            analysis.setNumActive(activeCount);
            analysis.setNumRetention1d(numRetention);
            analysisMapper.updateById(analysis);
        }else{
            analysis = new Analysis();
            analysis.setNumRegistered(regCount);
            analysis.setNumLogin(loginCount);
            analysis.setNumActive(activeCount);
            analysis.setNumRetention1d(numRetention);
            analysis.setRecordDate(new SimpleDateFormat("yyyy-MM-dd").parse(todayStr));
            analysis.setCreated(new Date());
            analysisMapper.insert(analysis);
        }
    }
}
